// pages/home/home.js
const app = getApp()
const auth = require('../../utils/auth')

Page({
  data: {
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    isAuthenticated: false,
    currentUser: null,
    stats: {
      dishCount: 0,
      todayOrders: 0,
      pendingOrders: 0
    },
    quickActions: [
      {
        icon: '📝',
        title: '今日订单',
        count: 0,
        action: 'todayOrders'
      },
      {
        icon: '⭐',
        title: '我的收藏',
        action: 'favorites'
      },
      {
        icon: '📊',
        title: '用餐统计',
        action: 'statistics'
      }
    ]
  },

  onLoad() {
    // 检查用户认证状态
    this.checkUserAuth()
    
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse) {
      // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
        // 获取用户信息后检查认证
        this.checkUserAuth()
      }
    } else {
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
          // 获取用户信息后检查认证
          this.checkUserAuth()
        }
      })
    }
  },

  onShow() {
    // 只有在未认证时才检查认证状态，避免重复渲染
    if (!this.data.isAuthenticated) {
      this.checkUserAuth()
    }
    this.loadStats()
  },

  // 检查用户认证状态
  checkUserAuth() {
    // 首先检查是否已经有认证状态
    const currentUser = auth.getCurrentUser()
    if (currentUser) {
      this.setData({
        isAuthenticated: true,
        currentUser: currentUser
      })
      return
    }
    
    // 如果没有认证状态，重新检查
    auth.checkAuthentication()
      .then(user => {
        auth.setCurrentUser(user)
        this.setData({
          isAuthenticated: true,
          currentUser: user
        })
      })
      .catch(err => {
        this.setData({
          isAuthenticated: false,
          currentUser: null
        })
      })
  },

  // 加载统计数据
  loadStats() {
    if (!this.data.isAuthenticated) {
      return
    }
    const db = wx.cloud.database()
    
    // 获取菜品总数
    db.collection('dishes').count().then(res => {
      this.setData({
        'stats.dishCount': res.total
      })
    })
    
    // 获取今日订单数
    const today = new Date()
    today.setHours(0, 0, 0, 0)
    
    db.collection('orders')
      .where({
        createTime: db.command.gte(today)
      })
      .count()
      .then(res => {
        this.setData({
          'stats.todayOrders': res.total,
          'quickActions[0].count': res.total
        })
      })
    
    // 获取待处理订单数
    db.collection('orders')
      .where({
        status: 'pending'
      })
      .count()
      .then(res => {
        this.setData({
          'stats.pendingOrders': res.total
        })
      })
  },

  // 导航到菜品管理
  navigateToDishes() {
    if (!this.checkAuthBeforeNavigate('菜品管理')) return
    console.log('点击了菜品管理')
    wx.switchTab({
      url: '/pages/dishes/dishes',
      fail: (err) => {
        console.error('跳转失败:', err)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 导航到点餐
  navigateToOrder() {
    if (!this.checkAuthBeforeNavigate('点餐')) return
    console.log('点击了点餐')
    wx.switchTab({
      url: '/pages/order/order',
      fail: (err) => {
        console.error('跳转失败:', err)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 导航到订单管理
  navigateToOrders() {
    if (!this.checkAuthBeforeNavigate('订单管理')) return
    console.log('点击了订单管理')
    wx.switchTab({
      url: '/pages/orders/orders',
      fail: (err) => {
        console.error('跳转失败:', err)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 导航到通知设置
  navigateToNotifications() {
    if (!this.checkAuthBeforeNavigate('通知设置')) return
    console.log('点击了通知设置')
    wx.navigateTo({
      url: '/pages/adminNotifications/adminNotifications',
      fail: (err) => {
        console.error('跳转失败:', err)
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        })
      }
    })
  },

  // 检查认证状态后导航
  checkAuthBeforeNavigate(featureName) {
    if (!this.data.isAuthenticated) {
      wx.showModal({
        title: '需要身份验证',
        content: `使用${featureName}功能需要先进行身份验证`,
        showCancel: true,
        confirmText: '去验证',
        success: (res) => {
          if (res.confirm) {
            this.authenticateUser()
          }
        }
      })
      return false
    }
    return true
  },

  // 用户身份验证
  authenticateUser() {
    if (!this.data.hasUserInfo) {
      wx.showModal({
        title: '需要用户信息',
        content: '请先授权获取用户信息',
        showCancel: false
      })
      return
    }
    
    auth.showAuthModal(this.data.userInfo)
      .then(user => {
        this.setData({
          isAuthenticated: true,
          currentUser: user
        })
        wx.showToast({
          title: '验证成功',
          icon: 'success'
        })
      })
      .catch(err => {
        console.error('验证失败:', err)
      })
  },

  // 快速操作
  onQuickAction(e) {
    const action = e.currentTarget.dataset.action
    switch(action) {
      case 'todayOrders':
        // 跳转到订单管理页面并传递今日订单参数
        wx.switchTab({
          url: '/pages/orders/orders',
          success: () => {
            // 在页面跳转后，可以通过页面间通信来设置显示今日订单
            const pages = getCurrentPages()
            const ordersPage = pages[pages.length - 1]
            if (ordersPage && ordersPage.route === 'pages/orders/orders') {
              ordersPage.setData({
                activeTab: 'pending' // 显示待烹饪订单
              })
            }
          }
        })
        break
      case 'favorites':
        wx.showToast({
          title: '功能开发中',
          icon: 'none'
        })
        break
      case 'statistics':
        wx.showToast({
          title: '功能开发中',
          icon: 'none'
        })
        break
    }
  },

  // 获取用户信息
  getUserProfile(e) {
    wx.getUserProfile({
      desc: '用于身份验证',
      success: (res) => {
        app.globalData.userInfo = res.userInfo
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
        // 获取用户信息后立即进行身份验证
        this.authenticateUser()
      }
    })
  },

  // 退出登录
  logout() {
    wx.showModal({
      title: '确认退出',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          auth.clearCurrentUser()
          this.setData({
            isAuthenticated: false,
            currentUser: null
          })
          wx.showToast({
            title: '已退出登录',
            icon: 'success'
          })
        }
      }
    })
  }
})